package br.edu.ufam.controleAcesso

class AplicacaoController {
    
    def index = { redirect(action:list,params:params) }

    // the delete, save and update actions only accept POST requests
    def static allowedMethods = [delete:'POST', save:'POST', update:'POST']

    def list = {    }

    def show = {
        def aplicacao = Aplicacao.get( params.id )

        if(!aplicacao) {
            flash.message = "Registro não encontrado!"
            redirect(action:list)
        }
        else { return [ aplicacao : aplicacao ] }
    }

    def delete = {
        def aplicacao = Aplicacao.get( params.id )
        if (aplicacao){
            def aplicGruUser = Aplicacao.executeQuery("select count(distinct a) from Aplicacao a, GrupoAplicacao g, UsuarioAplicacao u where " +
                "(g.aplicacao.id = a.id or u.aplicacao.id = a.id) and a.id = ?",[aplicacao.id])        
	        if (aplicGruUser[0] == 0){
	            Aplicacao.withTransaction{status ->
                    try{
                        aplicacao.delete(flush:true)
                        flash.message = "Operação realizada com sucesso!"
                    }catch(e){
                        flash.errors = "Operação não realizada! - " + e.toString()
                    }
                    redirect(action:list)
                }
	        }else{
	  	        flash.errors = "Operação não realizada! - " + "Aplicação está em grupo(s) ou usuário(s)."
		        redirect(action:list)
	        }
        }else {
            flash.message = "Registro não encontrado!"
            redirect(action:list)
        }
    }

    def edit = {        
        def aplicacao = Aplicacao.get( params.id )        
        if(!aplicacao) {
            flash.message = "Registro não encontrado!"
            redirect(action:list)
        }
        else {
            return [ aplicacao : aplicacao ]
        }
    }

    def update = {
        if (params.dtinicio) {
            params?.dtinicio = new Date().parse("dd/MM/yyyy hh:mm",params?.dtinicio)
        }
        if (params.dtfim) {
            params?.dtfim = new Date().parse("dd/MM/yyyy hh:mm",params?.dtfim)
        }
        def aplicacao = Aplicacao.get( params.id )        
        if(aplicacao) {
            aplicacao.properties = params
            aplicacao.usuarioUpdated = Usuario.get(session.usuario)
            if(!aplicacao.hasErrors() && aplicacao.save(flush:true)) {
                flash.message = "Operação realizada com sucesso!"
                redirect(action:show,id:aplicacao.id)
            }
            else {
                render(view:'edit',model:[aplicacao:aplicacao])
            }
        }
        else {
            flash.message = "Registro não encontrado!"
            redirect(action:edit,id:params.id)
        }
    }

    def create = {
        def aplicacao = new Aplicacao()
        aplicacao.properties = params
        return ['aplicacao':aplicacao]
    }

    def save = {
        if (params.dtinicio) {
            params?.dtinicio = new Date().parse("dd/MM/yyyy hh:mm",params?.dtinicio)
        }
        if (params.dtfim) {
            params?.dtfim = new Date().parse("dd/MM/yyyy hh:mm",params?.dtfim)
        }
        
        def aplicacao = new Aplicacao(params)        
        aplicacao.usuarioCreated = Usuario.get(session.usuario)
        aplicacao.usuarioUpdated = Usuario.get(session.usuario)
        if(!aplicacao.hasErrors() && aplicacao.save(flush:true)) {
            flash.message = "Operação realizada com sucesso!"
            redirect(action:show,id:aplicacao.id)
        }
        else {            
            render(view:'create',model:[aplicacao:aplicacao])
        }
    }

    def dosearch = {
        if (!params.max) {
            params.max = 10
            params.offset = 0
        }
        def aplicacoes = Aplicacao.findAll("from Aplicacao a where upper(a.descricao) like upper(?) order by a.descricao", ["%"+params.descricao+"%"], [max:params.max, offset:params.offset])
        int qtd = Aplicacao.countByDescricaoIlike("%${params.descricao}%")
        return [aplicacoes: aplicacoes, qtd: qtd]
    }
}
